package com.by.facade.enums.wxCp.chat;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author Tian Wei
 * @version 1.0
 * @date 2025/5/15 10:59
 */
@Getter
@AllArgsConstructor
public enum WxCpChatErrorEnum {

    PARAMETER_ERROR("10000", Boolean.TRUE,"请求参数错误", "检查Init接口corpid、secret参数；检查GetChatData接口limit参数是否未填或大于1000；检查GetMediaData接口sdkfileid是否为空，indexbuf是否正常"),
    NETWORK_ERROR("10001", Boolean.TRUE, "网络请求错误", "检查是否网络有异常、波动；检查使用代理的情况下代理参数是否设置正确的用户名与密码"),
    DATA_PARSING_FAILED("10002", Boolean.TRUE, "数据解析失败", "建议重试请求。若仍失败，可以反馈给企业微信进行查询，请提供sdk接口参数与调用时间点等信息"),
    SYSTEM_CALL_FAILED("10003", Boolean.TRUE, "系统调用失败", "GetMediaData调用失败，建议重试请求。若仍失败，可以反馈给企业微信进行查询，请提供sdk接口参数与调用时间点等信息"),
    DEPRECATED_1("10004", Boolean.TRUE, "已废弃", "目前不会返回此错误码"),
    FILEID_ERROR("10005", Boolean.TRUE, "fileid错误", "检查在GetMediaData接口传入的sdkfileid是否正确"),
    DECRYPTION_FAILED("10006", Boolean.TRUE, "解密失败", "请检查是否先进行base64decode再进行rsa私钥解密，再进行DecryptMsg调用"),
    DEPRECATED_2("10007", Boolean.TRUE, "已废弃", "目前不会返回此错误码"),
    DECRYPT_MSG_ERROR("10008", Boolean.TRUE, "DecryptMsg错误", "建议重试请求。若仍失败，可以反馈给企业微信进行查询，请提供sdk接口参数与调用时间点等信息"),
    IP_INVALID("10009",  Boolean.TRUE,"ip非法", "请检查sdk访问外网的ip是否与管理端设置的可信ip匹配，若不匹配会返回此错误码"),
    DATA_EXPIRED("10010", Boolean.FALSE,"请求的数据过期", "用户欲拉取的数据已过期，仅支持近5天内的数据拉取"),
    SSL_CERTIFICATE_ERROR("10011", Boolean.TRUE, "ssl证书错误", "使用openssl版本sdk，校验ssl证书失败"),
    ;

    private final String code;
    private final Boolean againProcess;
    private final String intro;
    private final String introDetail;
    private static final Map<String,WxCpChatErrorEnum> MAP;
    static {
        MAP = Stream.of(WxCpChatErrorEnum.values()).collect(Collectors.toMap(WxCpChatErrorEnum::getCode, Function.identity()));
    }
    public static WxCpChatErrorEnum resolveByCode(String code){
        return Optional.ofNullable(MAP.get(code)).orElse(null);
    }

}
